package com.yxw.yxnet_cd_center.common.utils;

import com.yxw.yxnet_cd_center.common.constant.CommonConstant;
import com.yxw.yxnet_cd_center.common.enums.CommonErrorEnum;
import com.yxw.yxnet_cd_center.common.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * 文件格式校验工具类
 *
 * @author Administrator
 */
@Slf4j
public class FileUtils {

    private static final List<String> PIC_TYPES = new ArrayList<>();
    private static final List<String> VIDEO_TYPES = new ArrayList<>();

    static {
        PIC_TYPES.add(".jpg");
        PIC_TYPES.add(".JPG");
        PIC_TYPES.add(".jpeg");
        PIC_TYPES.add(".JPEG");
        PIC_TYPES.add(".png");
        PIC_TYPES.add(".PNG");
        PIC_TYPES.add(".bmp");
        PIC_TYPES.add(".BMP");
        PIC_TYPES.add(".gif");
        PIC_TYPES.add(".GIF");
    }

    static {
        VIDEO_TYPES.add(".avi");
        VIDEO_TYPES.add(".AVI");
        VIDEO_TYPES.add(".wmv");
        VIDEO_TYPES.add(".WMV");
        VIDEO_TYPES.add(".mpeg");
        VIDEO_TYPES.add(".MPEG");
        VIDEO_TYPES.add(".mp4");
        VIDEO_TYPES.add(".MP4");
        VIDEO_TYPES.add(".m4v");
        VIDEO_TYPES.add(".M4V");
        VIDEO_TYPES.add(".mov");
        VIDEO_TYPES.add(".MOV");
        VIDEO_TYPES.add(".asf");
        VIDEO_TYPES.add(".ASF");
        VIDEO_TYPES.add(".flv");
        VIDEO_TYPES.add(".FLV");
        VIDEO_TYPES.add(".f4v");
        VIDEO_TYPES.add(".F4V");
        VIDEO_TYPES.add(".rmvb");
        VIDEO_TYPES.add(".RMVB");
        VIDEO_TYPES.add(".rm");
        VIDEO_TYPES.add(".RM");
        VIDEO_TYPES.add(".3gp");
        VIDEO_TYPES.add(".3GP");
        VIDEO_TYPES.add(".vob");
        VIDEO_TYPES.add(".VOB");
        VIDEO_TYPES.add(".mp3");
        VIDEO_TYPES.add(".MP3");
    }

    /**
     * 图片文件校验
     */
    public static boolean checkImageFileType(MultipartFile[] multipartFiles) {
        try {
            for (MultipartFile multipartFile : multipartFiles) {
                String suffix = Objects.requireNonNull(multipartFile.getOriginalFilename()).substring(multipartFile.getOriginalFilename().lastIndexOf(CommonConstant.POINT) + 1);
                if (!PIC_TYPES.contains(CommonConstant.POINT + suffix)) {
                    throw new BaseException(CommonErrorEnum.FILE_TYPE_VERIFY_ERROR);
                }
            }
        } catch (Exception e) {
            log.error("errorUpload_上传出错:{}", e.getMessage());
            throw new BaseException(CommonErrorEnum.FILE_TYPE_VERIFY_ERROR, e.getMessage());
        }
        return true;
    }

    /**
     * 视频文件校验
     */
    public static boolean checkVideoFileType(MultipartFile[] multipartFiles) {
        try {
            for (MultipartFile multipartFile : multipartFiles) {
                String suffix = Objects.requireNonNull(multipartFile.getOriginalFilename()).substring(multipartFile.getOriginalFilename().lastIndexOf(CommonConstant.POINT) + 1);
                if (!VIDEO_TYPES.contains(CommonConstant.POINT + suffix)) {
                    throw new BaseException(CommonErrorEnum.FILE_TYPE_VERIFY_ERROR);
                }
            }
        } catch (Exception e) {
            log.error("errorUpload_上传出错:{}", e.getMessage());
            throw new BaseException(CommonErrorEnum.FILE_TYPE_VERIFY_ERROR, e.getMessage());
        }
        return true;
    }
    /**
     * 上传视频校验
     */
    public static String validataVideo(MultipartFile videoFile,long fileVideoMaxSize){
        if(null==videoFile){
            return "视频文件不能为空<br>";
        }
        StringBuffer sbf=new StringBuffer();
        //视频大小校验
        if (videoFile.getSize() > fileVideoMaxSize) {
            sbf.append("不能上传超过" + fileVideoMaxSize / 1024.0 / 1024.0 + "M的视频<br>");
        }
        String suffix = Objects.requireNonNull(videoFile.getOriginalFilename()).substring(videoFile.getOriginalFilename().lastIndexOf(CommonConstant.POINT) + 1);
        if (!VIDEO_TYPES.contains(CommonConstant.POINT + suffix)) {
            sbf.append("视频格式错误,请传视频格式文件<br>");
        }
        return sbf.toString();
    }

    /**
     * 封面图片校验
     * @param coverFile
     */
    public static String validataCover(MultipartFile coverFile,long fileImageMaxSize){
        if(null==coverFile){
            return "封面文件不能为空<br>";
        }
        StringBuffer sbf=new StringBuffer();
        //封面大小校验
        if (coverFile.getSize() > fileImageMaxSize) {
            sbf.append("视频封面不能上传超过" + fileImageMaxSize / 1024.0 / 1024.0 + "M的图片<br>");
        }
        //文件后缀校验
        String suffix = Objects.requireNonNull(coverFile.getOriginalFilename()).substring(coverFile.getOriginalFilename().lastIndexOf(CommonConstant.POINT) + 1);
        if (!PIC_TYPES.contains(CommonConstant.POINT + suffix)) {
            sbf.append("视频封面格式错误,请传图片格式文件<br>");
        }
        return sbf.toString();
    }
}

